/**
 * 智能导航工具函数
 * 处理页面返回逻辑，支持多种返回策略
 */

/**
 * 智能返回导航
 * 有上一页则返回上一页，否则跳转到指定页面
 * @param fallbackUrl 回退失败的跳转地址，默认为首页
 * @param options 额外配置
 */
export function smartNavigationBack(fallbackUrl: string = '/pages/index/index', options?: {
  successCallback?: () => void;
  failCallback?: () => void;
}) {
  const { successCallback, failCallback } = options || {}

  try {
    const pages = getCurrentPages()

    if (pages.length > 1) {
      // 有上一页，返回上一页
      uni.navigateBack({
        success: successCallback,
        fail: () => {
          // 返回失败，跳转到备用页面
          uni.reLaunch({
            url: fallbackUrl,
            success: successCallback,
            fail: failCallback
          })
        }
      })
    } else {
      // 没有上一页，跳转到备用页面
      uni.reLaunch({
        url: fallbackUrl,
        success: successCallback,
        fail: failCallback
      })
    }
  } catch (error) {
    console.error('导航失败:', error)
    // 出错时直接跳转到备用页面
    uni.reLaunch({
      url: fallbackUrl,
      success: successCallback,
      fail: failCallback
    })
  }
}

/**
 * 检查是否有上一页
 * @returns 是否有上一页可以返回
 */
export function hasPreviousPage(): boolean {
  try {
    const pages = getCurrentPages()
    return pages.length > 1
  } catch (error) {
    console.error('检查页面栈失败:', error)
    return false
  }
}

/**
 * 安全的页面跳转
 * @param url 跳转地址
 * @param type 跳转类型：navigateTo、redirectTo、reLaunch
 */
export function safeNavigate(url: string, type: 'navigateTo' | 'redirectTo' | 'reLaunch' = 'navigateTo') {
  return new Promise((resolve, reject) => {
    uni[type]({
      url,
      success: resolve,
      fail: (error) => {
        console.error(`页面跳转失败: ${type} ${url}`, error)
        reject(error)
      }
    })
  })
}

/**
 * 获取当前页面信息
 * @returns 当前页面的路由信息
 */
export function getCurrentPageInfo() {
  try {
    const pages = getCurrentPages()
    const currentPage = pages[pages.length - 1]

    if (currentPage) {
      return {
        route: currentPage.route,
        options: currentPage.options,
        page: currentPage
      }
    }

    return null
  } catch (error) {
    console.error('获取当前页面信息失败:', error)
    return null
  }
}